Verstappen ultimately won by just seven-tenths after 63 laps of racing.
Norris had reeled the Red Bull Racing driver in quickly with 10 laps to go, but was agonisingly short of mounting a serious challenge against the race leader.
Charles Leclerc was third while Oscar Piastri climbed ahead of Carlos Sainz to finish fourth.
An even start saw Verstappen hold his advantage over Norris into the opening chicane, with Leclerc third from Sainz and Piastri.
In the pack, Daniel Ricciardo dropped two places, as did Yuki Tsunoda, Sergio Perez climbing his way into 10th by the end of the opening lap.
Verstappen did not immediately sprint clear at the front, easing the gap open until Lap 4 by which time he was out of DRS range of Norris behind.
Norris had also opened a gap to Leclerc in third, with Sainz out of DRS range of his team-mate but under attack by Piastri.
Having pitted early, Alex Albon was slow when he rejoined the track on Lap 9, touring back around the pits where he had a set of medium tyres fitted.
He’d started the race on soft tyres, boxing early for hards in a strategy designed to capitalise on a Safety Car prior to the traditional pit window opening.
The outcome was he dropped a lap behind the pack as he circulated in 20th and last.
Ricciardo pitted after 11 laps, with Tsunoda in next time by.
On Lap 18, a mistake from Perez saw the Mexican skate through the gravel trap at Rivazza.
He was able to rejoin but lost five seconds in the incident as he remained eighth – having already been distanced by Lewis Hamilton ahead.
Piastri remained tucked up behind Sainz throughout the opening stint; close enough to threaten but not close enough to offer a serious challenge.
Norris was the first of the front-runners to stop when he pitted on Lap 23.
A slick, 2.4s stop wasn’t enough to keep him ahead of Perez, however, as the second Red Bull Racing entry swept by on the run to Tamburello.
Piastri was in the lane on the following lap, exiting as officials showed Verstappen a flag for unsportsmanlike behaviour – specifically for track limits.
He pitted from the lead at the end of Lap 24, rejoining fourth – the effective lead as the three cars ahead were yet to stop.
With good pace following his stop, Piastri had effectively cleared Sainz despite the Spaniard having not served his first stop.
With Leclerc also at risk of losing out to the McLaren driver, Ferrari called him in to cover off the looming Australian.
It worked, the Ferrari driver fifth on the road, while Piastri had to clear Perez on Lap 27 to move up to sixth.
Sainz boxed after 27 laps from the race lead, the last of the real front-runners to take service, and slotted in sixth – fifth on the corrected order given Perez ahead hadn’t stopped.
Piastri soon caught Leclerc but found himself stuck looking at the Ferrari rear wing for the second time in the race.
At mid-distance, the order was Verstappen from Norris, 6.5s between the pair, with Leclerc third behind kept honest by Piastri.
Perez finally stopped after 37 laps, having dropped to eighth and 38s back from his race-leading team-mate.
He filtered out 11th behind Daniel Ricciardo, with a set of medium tyres on his car, a minute back from Verstappen.
However, he was rapid and quickly climbed back into the top 10, taking Tsunoda for eighth into Tamburello on Lap 42.
In second, Norris came under pressure from Leclerc.
He’d dropped more than seven seconds behind Verstappen while, on the hard tyres, the Ferrari looked the more competitive package.
It came to nothing and Leclerc eventually speared off the road at Variante Alta on Lap 47, bouncing across the grass and dropping over a second in the process.
With 10 laps remaining, Verstappen held a four second advantage, his lead eroded somewhat as he worked through traffic.
Norris was becoming a threat in second as Leclerc’s challenge was blunted following his off at Variante Alta. Then came Piastri, Sainz, Hamilton, Russell, Perez, Lance Stroll, and Tsunoda.
Verstappen was struggling for pace, Norris reeling him in to sit 3.4s back with nine laps remaining. A lap later, there was just two seconds – and no traffic – separating the leading pair.
The gap stalled out at 1.6s, Verstappen doing enough to remain ahead and, importantly, out of DRS range, until the penultimate lap when Norris renewed his efforts.
The McLaren driver started the 63rd and final tour 1.017s back from the Dutchman, closing that gap further over the final tour.
Verstappen had his measure and hung on to win ahead of the McLaren driver in a nail-biting conclusion to what was, for the most part, a processional affair.
Leclerc was third, ahead of Piastri, Sainz, Hamilton, Russell, Perez, Stroll, and Tsunoda in the top 10.
Daniel Ricciardo slipped to 13th at the flag, having run 12th ahead of Kevin Magnussen in the closing laps.